home *** CD-ROM | disk | FTP | other *** search
-
- func void LoadDatabase()
- {
- println("\tLoading Database : "+ m_szMenuServerDatabase);
- Database_Load( DATABASE_SERVER, m_szMenuServerDatabase );
- }
-
- func void SaveDatabase()
- {
- // debug : special demo
- //Do not save slot in demo version
- if ((!isDemo()) && (DATABASE_SERVER!=0))
- {
- println("MS : Saving database " + m_szMenuServerDatabase);
- Database_Save( DATABASE_SERVER, m_szMenuServerDatabase, 1 );
- }
- }
-
-
- //***************************************
- // * Function : Main
- // *
- // * Create the menu server on first free port
- // ***************************************/
- func i32x MenuServer_Constructor( i32x _bGateway, szx _szGatewayIP, szx _szDatabase, boolx _bIsNewGame, i32x _iNewGameMode, i32x _iNewStartingDay )
- {
- var i32x i;
- var i32x iNumRows;
- var szx szColumnName,szRacer;
-
- print("Starting menu server...\n");
-
- // database
- DATABASE_SERVER = Database_Constructor("ServerDB");
- if (_bIsNewGame)
- {
- m_szMenuServerDatabase = "Database/Database.cdb";
- }
- else
- {
- m_szMenuServerDatabase = _szDatabase;
- }
- LoadDatabase();
- m_szMenuServerDatabase = _szDatabase;
- Database_BeginSynchronize( DATABASE_SERVER );
-
-
-
- // global joins
- g_stJoins.m_iGame_iMode = Join_Constructor(DATABASE_SERVER,"GAM_config.fkIDgamemode");
- g_stJoins.m_iGame_iIsOver = Join_Constructor(DATABASE_SERVER,"GAM_config.game_i_is_over");
- g_stJoins.m_iGame_iNumConnected = Join_Constructor(DATABASE_SERVER,"GAM_config.temp_i_numconnected");
- g_stJoins.m_iGame_iNumRegistered= Join_Constructor(DATABASE_SERVER,"GAM_config.game_i_numregistered");
-
- g_stJoins.m_iGateway_szIP = Join_Constructor(DATABASE_SERVER,"GAM_gateway.gene_sz_ip");
- g_stJoins.m_iGateway_szDesc = Join_Constructor(DATABASE_SERVER,"GAM_gateway.gene_sz_desc");
-
- g_stJoins.m_iUser_iID = Join_Constructor(DATABASE_SERVER,"GAM_user.IDuser");
- g_stJoins.m_iUser_szLogin = Join_Constructor(DATABASE_SERVER,"GAM_user.game_sz_login");
-
-
- g_stJoins.m_iUser_iTeamId = Join_Constructor(DATABASE_SERVER,"GAM_user.fkIDteam_duplicate");
- g_stJoins.m_iTeam_iUserId = Join_Constructor(DATABASE_SERVER,"DYN_team.fkIDuser_duplicate");
-
-
- g_stJoins.m_iUser_iActive = Join_Constructor(DATABASE_SERVER,"GAM_user.game_i_active");
- g_stJoins.m_iUser_iLaunchGame = Join_Constructor(DATABASE_SERVER,"GAM_user.game_i_launch");
- g_stJoins.m_iUser_iState = Join_Constructor(DATABASE_SERVER,"GAM_user.fkIDuser_state");
- g_stJoins.m_iUser_iConnected = Join_Constructor(DATABASE_SERVER,"GAM_user.game_i_connected");
- g_stJoins.m_iUser_szPassword = Join_Constructor(DATABASE_SERVER,"GAM_user.game_sz_authorization");
- g_stJoins.m_iUser_iInRaceReady = Join_Constructor(DATABASE_SERVER,"GAM_user.temp_i_inrace_ready");
- g_stJoins.m_iUser_iPreRaceTeamId= Join_Constructor(DATABASE_SERVER,"GAM_user.fkIDteam_duplicate.DYN_team.prerace_i_team");
-
- g_stJoins.m_iStage_iWeather = Join_Constructor(DATABASE_SERVER,"STA_stage.gene_i_weather");
- g_stJoins.m_iStage_iDay = Join_Constructor(DATABASE_SERVER,"STA_stage.fkIDday");
-
-
- g_stJoins.m_iStaff_iRoleId = Join_Constructor(DATABASE_SERVER,"DYN_staff.fkIDstaff_role");
- g_stJoins.m_iStaff_iTeamId = Join_Constructor(DATABASE_SERVER,"DYN_staff.fkIDteam");
-
- // XChange join
- g_stJoins.m_iXChange_iCyclistID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.fkIDcyclist");
- g_stJoins.m_iXChange_iTeamID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.fkIDteam");
- g_stJoins.m_iXChange_fInitAmount = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.finan_f_initial_amount");
- g_stJoins.m_iXChange_fAmount = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.finan_f_period_wage");
- g_stJoins.m_iXChange_iDuration = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.finan_i_duration");
- g_stJoins.m_iXChange_iXChangeID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.IDxchange_cyclist");
- g_stJoins.m_iXChange_fWaiting = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.ia_f_waiting");
- g_stJoins.m_iXChange_iStatusId = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.fkIDstatus_enum");
- g_stJoins.m_iXChange_ifkIDXChangeID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.fkIDxchange_cyclist");
- g_stJoins.m_iXChange_iSens = Join_Constructor(DATABASE_SERVER,"DYN_xchange_cyclist.ia_i_sens");
-
- g_stJoins.m_iXChangeSponsor_iSponsorID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.fkIDsponsor");
- g_stJoins.m_iXChangeSponsor_iTeamID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.fkIDteam");
- g_stJoins.m_iXChangeSponsor_fInitAmount = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.finan_f_initial_amount");
- g_stJoins.m_iXChangeSponsor_fAmount = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.finan_f_period_amount");
- g_stJoins.m_iXChangeSponsor_iDuration = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.finan_i_duration");
- g_stJoins.m_iXChangeSponsor_iXChangeID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.IDxchange_sponsor");
- g_stJoins.m_iXChangeSponsor_fWaiting = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.ia_f_waiting");
- g_stJoins.m_iXChangeSponsor_iStatusId = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.fkIDstatus_enum");
- g_stJoins.m_iXChangeSponsor_ifkIDXChangeID= Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.fkIDxchange_sponsor");
- g_stJoins.m_iXChangeSponsor_iSens = Join_Constructor(DATABASE_SERVER,"DYN_xchange_sponsor.ia_i_sens");
-
- g_stJoins.m_iXChangeLayoff_iCyclistID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_layoff.fkIDcyclist");
- g_stJoins.m_iXChangeLayoff_iTeamID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_layoff.fkIDteam");
- g_stJoins.m_iXChangeLayoff_fInitAmount = Join_Constructor(DATABASE_SERVER,"DYN_xchange_layoff.finan_f_indemnities");
- g_stJoins.m_iXChangeLayoff_iXChangeID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_layoff.IDxchange_layoff");
- g_stJoins.m_iXChangeLayoff_fWaiting = Join_Constructor(DATABASE_SERVER,"DYN_xchange_layoff.ia_f_waiting");
- g_stJoins.m_iXChangeLayoff_iStatusId = Join_Constructor(DATABASE_SERVER,"DYN_xchange_layoff.fkIDstatus_enum");
- g_stJoins.m_iXChangeLayoff_ifkIDXChangeID= Join_Constructor(DATABASE_SERVER,"DYN_xchange_layoff.fkIDxchange_layoff");
- g_stJoins.m_iXChangeLayoff_iSens = Join_Constructor(DATABASE_SERVER,"DYN_xchange_layoff.ia_i_sens");
-
- g_stJoins.m_iXChangeTransfert_iCyclistID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.fkIDcyclist");
- g_stJoins.m_iXChangeTransfert_iTeamID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.fkIDteam");
- g_stJoins.m_iXChangeTransfert_fInitAmount = Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.finan_f_period_amount");
- g_stJoins.m_iXChangeTransfert_iXChangeID = Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.IDxchange_transfert");
- g_stJoins.m_iXChangeTransfert_fWaiting = Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.ia_f_waiting");
- g_stJoins.m_iXChangeTransfert_iStatusId = Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.fkIDstatus_enum");
- g_stJoins.m_iXChangeTransfert_ifkIDXChangeID= Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.fkIDxchange_transfert");
- g_stJoins.m_iXChangeTransfert_iSens = Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.ia_i_sens");
- g_stJoins.m_iXChangeTransfert_iLast = Join_Constructor(DATABASE_SERVER,"DYN_xchange_transfert.gene_b_last");
-
- g_stJoins.m_iTeam_iId = Join_Constructor(DATABASE_SERVER,"DYN_team.IDteam");
- g_stJoins.m_iTeam_iInviteEnum = Join_Constructor(DATABASE_SERVER,"DYN_team.game_i_invite_enum");
- g_stJoins.m_iTeam_szAbrev = Join_Constructor(DATABASE_SERVER,"DYN_team.gene_sz_abbreviation");
- g_stJoins.m_iTeam_szName = Join_Constructor(DATABASE_SERVER,"DYN_team.gene_sz_name");
-
- g_stJoins.m_iCyclist_iId = Join_Constructor(DATABASE_SERVER,"DYN_cyclist.IDcyclist");
- g_stJoins.m_iCyclist_szFirstName = Join_Constructor(DATABASE_SERVER,"DYN_cyclist.fkIDcharacteristic.DYN_characteristic.civic_sz_firstname");
- g_stJoins.m_iCyclist_szLastName = Join_Constructor(DATABASE_SERVER,"DYN_cyclist.fkIDcharacteristic.DYN_characteristic.civic_sz_lastname");
- g_stJoins.m_iCyclist_iTeamId = Join_Constructor(DATABASE_SERVER,"DYN_cyclist.fkIDteam");
- g_stJoins.m_iCyclist_iPreRaceIndex = Join_Constructor(DATABASE_SERVER,"DYN_cyclist.prerace_i_cyclist");
- g_stJoins.m_iCyclist_iWithdrawal = Join_Constructor(DATABASE_SERVER,"DYN_cyclist.race_b_withdrawal");
-
-
- i=0;
- szRacer = "DYN_team.fkIDcyclist_";
- //szColumnName = "DYN_team.fkIDcurrent_tactic_";
- while(i<9)
- {
- g_stJoins.m_iTeam_iRacerId[i] = Join_Constructor(DATABASE_SERVER,strcat(szRacer,itoa(i+1)));
- //g_stJoins.m_iTeam_iTacticId[i] = Join_Constructor(DATABASE_SERVER,strcat(szColumnName,itoa(i+1)));
- i=i+1;
- }
-
-
-
- // init user state
- i=0;
- iNumRows = Join_GetNumRows(g_stJoins.m_iUser_iInRaceReady);
- while (i<iNumRows)
- {
- Join_SetIntFromIndex(g_stJoins.m_iUser_iInRaceReady, i, 0);
- Join_SetIntFromIndex(g_stJoins.m_iUser_iLaunchGame, i, 0);
- Join_SetIntFromIndex(g_stJoins.m_iUser_iState, i, 1); // Set wait mode
- Join_SetIntFromIndex(g_stJoins.m_iUser_iConnected, i, 0);
- i=i+1;
- }
-
-
- // num connected
- Join_SetIntFromIndex( g_stJoins.m_iGame_iNumConnected, 0, 0 );
-
- // init db for first launch
- if (_bIsNewGame==1)
- {
- // Init db Weather
- i=0;
- iNumRows = Join_GetNumRows(g_stJoins.m_iStage_iWeather);
- while (i<iNumRows)
- {
- Join_SetIntFromIndex(g_stJoins.m_iStage_iWeather, i, g_iWEATHER_NotInit);
- i = i+1;
- }
-
- // Save game mode in db
- Join_SetIntFromIndex(g_stJoins.m_iGame_iMode,0,_iNewGameMode);
-
- // reset game over in db
- Join_SetIntFromIndex(g_stJoins.m_iGame_iIsOver,0,0);
-
- // Save starting day in db
- Database_SetIntData( DATABASE_SERVER, "GAM_config.fkIDday", ROW_INDEX ,0, _iNewStartingDay );
- }
-
-
-
- // set Game mode from DB
- SetGameMode(Join_GetIntFromIndex(g_stJoins.m_iGame_iMode,0));
-
-
-
-
-
- // Create ancestor component
- g_pAncestorComponent = NewObject(iAncestorInterface);
-
- // Set this object as first of all
- if (!g_gcManager)
- {
- g_gcManager = g_pAncestorComponent;
- ManagerComponent(g_pAncestorComponent);
- }
- else
- {
- MountComponent(g_gcManager,g_pAncestorComponent);
- }
-
- // create server
- g_pServer=NetServer_Create(g_iServerPort,g_pAncestorComponent);
- if (g_pServer)
- {
- // Read the server port
- g_iServerPort = NetServer_GetPort(g_pServer);
-
- println("--- Server Online on port " + itoa(g_iServerPort));
- }
-
- // connect to gateway
- if (_bGateway)
- {
- // create alive gateway timer
- g_iAliveTimer = CreateTimer( g_fAliveTime, fnUpdateAlive, 1);
-
- // create udp gateway client
- g_pGatewayUDPClient = NetUDPClient_Constructor( _szGatewayIP, g_iGatewayAlivePort );
-
- // first update
- fnUpdateAlive();
- }
-
- // init phase/day callback
- SetStopRaceFunc(NotifyRaceStop);
-
-
- print("ok\n");
-
- return DATABASE_SERVER;
- }
-
-
-
-
- func void MenuServer_Destructor()
- {
- var i32x i;
-
- print("stopping menu server..\n");
-
- // save database
- SaveDatabase();
-
- // destroy server
- if (g_pServer)
- NetServer_Destroy(g_pServer);
- g_pServer = G_pNullServer;
-
- // delete udp client gateway
- if (g_pGatewayUDPClient)
- NetUDPClient_Destructor(g_pGatewayUDPClient);
- g_pGatewayUDPClient = g_pNullUDPClient;
-
- // destroy gateway timer
- if (g_iAliveTimer)
- DestroyTimer(g_iAliveTimer);
- g_iAliveTimer = 0;
-
- // destroy joins
- if (g_stJoins.m_iUser_szLogin)
- {
- Join_Destructor(g_stJoins.m_iGateway_szIP);
- Join_Destructor(g_stJoins.m_iGateway_szDesc);
-
- Join_Destructor(g_stJoins.m_iGame_iIsOver);
- Join_Destructor(g_stJoins.m_iGame_iNumConnected);
- Join_Destructor(g_stJoins.m_iGame_iNumRegistered);
- Join_Destructor(g_stJoins.m_iGame_iMode);
-
- Join_Destructor(g_stJoins.m_iUser_iID);
- Join_Destructor(g_stJoins.m_iUser_szLogin);
-
- Join_Destructor(g_stJoins.m_iUser_iTeamId);
- Join_Destructor(g_stJoins.m_iTeam_iUserId);
-
-
- Join_Destructor(g_stJoins.m_iUser_iActive);
- Join_Destructor(g_stJoins.m_iUser_iLaunchGame);
- Join_Destructor(g_stJoins.m_iUser_iState);
- Join_Destructor(g_stJoins.m_iUser_iConnected);
- Join_Destructor(g_stJoins.m_iUser_iInRaceReady);
- Join_Destructor(g_stJoins.m_iUser_iPreRaceTeamId);
- Join_Destructor(g_stJoins.m_iUser_szPassword);
-
- i=0;
- while(i<9)
- {
- Join_Destructor(g_stJoins.m_iTeam_iRacerId[i]);
- //Join_Destructor(g_stJoins.m_iTeam_iTacticId[i]);
- i=i+1;
- }
- Join_Destructor(g_stJoins.m_iTeam_iId);
- Join_Destructor(g_stJoins.m_iTeam_iInviteEnum);
- Join_Destructor(g_stJoins.m_iCyclist_iId);
- Join_Destructor(g_stJoins.m_iCyclist_szFirstName);
- Join_Destructor(g_stJoins.m_iCyclist_szLastName);
- Join_Destructor(g_stJoins.m_iCyclist_iTeamId);
- Join_Destructor(g_stJoins.m_iCyclist_iPreRaceIndex);
- Join_Destructor(g_stJoins.m_iCyclist_iWithdrawal);
-
- // XChange join
- Join_Destructor(g_stJoins.m_iXChange_iCyclistID);
- Join_Destructor(g_stJoins.m_iXChange_iTeamID);
- Join_Destructor(g_stJoins.m_iXChange_fInitAmount);
- Join_Destructor(g_stJoins.m_iXChange_fAmount);
- Join_Destructor(g_stJoins.m_iXChange_iDuration);
- Join_Destructor(g_stJoins.m_iXChange_iXChangeID);
- Join_Destructor(g_stJoins.m_iXChange_fWaiting);
- Join_Destructor(g_stJoins.m_iXChange_iStatusId);
- Join_Destructor(g_stJoins.m_iXChange_ifkIDXChangeID);
- Join_Destructor(g_stJoins.m_iXChange_iSens);
-
- Join_Destructor(g_stJoins.m_iXChangeSponsor_iSponsorID);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_iTeamID);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_fInitAmount);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_fAmount);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_iDuration);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_iXChangeID);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_fWaiting);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_iStatusId);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_ifkIDXChangeID);
- Join_Destructor(g_stJoins.m_iXChangeSponsor_iSens);
-
- Join_Destructor(g_stJoins.m_iXChangeLayoff_iCyclistID);
- Join_Destructor(g_stJoins.m_iXChangeLayoff_iTeamID);
- Join_Destructor(g_stJoins.m_iXChangeLayoff_fInitAmount);
- Join_Destructor(g_stJoins.m_iXChangeLayoff_iXChangeID);
- Join_Destructor(g_stJoins.m_iXChangeLayoff_fWaiting);
- Join_Destructor(g_stJoins.m_iXChangeLayoff_iStatusId);
- Join_Destructor(g_stJoins.m_iXChangeLayoff_ifkIDXChangeID);
- Join_Destructor(g_stJoins.m_iXChangeLayoff_iSens);
-
- Join_Destructor(g_stJoins.m_iXChangeTransfert_iCyclistID);
- Join_Destructor(g_stJoins.m_iXChangeTransfert_iTeamID);
- Join_Destructor(g_stJoins.m_iXChangeTransfert_fInitAmount);
- Join_Destructor(g_stJoins.m_iXChangeTransfert_iXChangeID);
- Join_Destructor(g_stJoins.m_iXChangeTransfert_fWaiting);
- Join_Destructor(g_stJoins.m_iXChangeTransfert_iStatusId);
- Join_Destructor(g_stJoins.m_iXChangeTransfert_ifkIDXChangeID);
- Join_Destructor(g_stJoins.m_iXChangeTransfert_iSens);
- Join_Destructor(g_stJoins.m_iXChangeTransfert_iLast);
-
-
-
- Join_Destructor(g_stJoins.m_iStage_iWeather);
- Join_Destructor(g_stJoins.m_iStage_iDay);
-
- Join_Destructor(g_stJoins.m_iTeam_szName);
- Join_Destructor(g_stJoins.m_iTeam_szAbrev);
-
- Join_Destructor(g_stJoins.m_iStaff_iRoleId);
- Join_Destructor(g_stJoins.m_iStaff_iTeamId);
- }
-
- // destroy database
- if (DATABASE_SERVER)
- Database_Destructor( DATABASE_SERVER );
- DATABASE_SERVER = 0;
-
- print("ok.\n");
- }
-
-